www.gusucode.com > VC++ 信息加密聊天源代码-源码程序 > VC++ 信息加密聊天源代码-源码程序\code\SecChat\Setup.cpp

    //Download by http://www.NewXing.com
// Setup.cpp : implementation file
//

#include "stdafx.h"
#include "secretchat.h"
#include "Setup.h"
#include "SecretChatDlg.h"	//主窗口类头文件

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CSetup dialog


CSetup::CSetup(CWnd* pParent /*=NULL*/)
	: CDialog(CSetup::IDD, pParent)
{
	//{{AFX_DATA_INIT(CSetup)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}


void CSetup::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSetup)
	DDX_Control(pDX, IDC_SETUPTAB, m_setupTab);
	DDX_Control(pDX, IDC_DINGWEI, m_dingWei);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CSetup, CDialog)
	//{{AFX_MSG_MAP(CSetup)
	ON_NOTIFY(TCN_SELCHANGE, IDC_SETUPTAB, OnSelchangeSetuptab)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSetup message handlers

void CSetup::OnOK() 
{
	CSecretChatDlg * pSecretChatDlg = (CSecretChatDlg *)AfxGetMainWnd();
	CWaitCursor WaitCursor;	//等待光标

	if( !m_secretKeySetupDlg.UpdateData()) return;
	if( !m_privateManagerDlg.UpdateData()) return;
	if( !m_publicKeyManagerDlg.UpdateData()) return;
	if( !m_generalDlg.UpdateData()) return;
	
	//设置密钥设置选项
	CString strUser, strFriend;
	if(m_secretKeySetupDlg.m_userIndex == -1)
	{
		MessageBox(
			"没有选择用户私钥",
			"密聊",
			MB_ICONINFORMATION);
	}
	else
	{
		m_secretKeySetupDlg.m_userPrivateKey.GetLBText(
			m_secretKeySetupDlg.m_userIndex,
			strUser);
		AfxGetApp()->WriteProfileString(
			"SecretKeySetup",
			"UserPrivateKey",
			strUser);
	}
	if(m_secretKeySetupDlg.m_friendIndex == -1)
	{
		MessageBox(
			"没有选择好友公钥",
			"密聊",
			MB_ICONINFORMATION);
	}
	else
	{
		m_secretKeySetupDlg.m_friendPublicKey.GetLBText(
			m_secretKeySetupDlg.m_friendIndex,
			strFriend);
		AfxGetApp()->WriteProfileString(
			"SecretKeySetup",
			"FriendPublicKey",
			strFriend);
	}

	//设置常规选项
	AfxGetApp()->WriteProfileInt("General", "ArriveSound", m_generalDlg.m_arriveSound);
	AfxGetApp()->WriteProfileInt("General", "ArriveShow", m_generalDlg.m_arriveShow);
	AfxGetApp()->WriteProfileInt("General", "Top", m_generalDlg.m_top);
	AfxGetApp()->WriteProfileInt("General", "Tray", m_generalDlg.m_tray);

	AfxGetApp()->WriteProfileInt("General", "LANStartup", m_generalDlg.m_LANStartup);
    CString  strIP;
	BYTE  b1,b2,b3,b4;
    m_generalDlg.m_LANIP.GetAddress(b1,b2,b3,b4);	//获得IP
	m_generalDlg.m_LANIP.GetWindowText(strIP);	//获得IP
	//AfxMessageBox(strIP);
 //   strIP.Format(
//		"%d.%d.%d.%d",
//		b1,b2,b3,b4);	//把数字转换成字符
	AfxGetApp()->WriteProfileString("General", "LANIP", strIP);

	AfxGetApp()->WriteProfileInt("General", "Startup", m_generalDlg.m_startup);
	//启动时是否自动运行
	HKEY hkey;	//键句柄
	if(m_generalDlg.m_startup)
	{
		//启动
		::RegOpenKeyEx(
			HKEY_LOCAL_MACHINE/*主键*/,
			"SOFTWARE\\MICROSOFT\\WINDOWS\\CURRENTVERSION\\RUN"/*子键*/,
			NULL,
			KEY_ALL_ACCESS,
			&hkey); 
		::RegSetValueEx(
			hkey,
			"SecretChat"/*键值*/,
			0,
			REG_SZ,
			(LPBYTE)__argv[0]/*键值的数据*/,
			256);	//把sz的数据写入到记事本键值
		::RegCloseKey(hkey);	//关闭
	}
	else
	{
		//关闭
		::RegOpenKeyEx( 
			HKEY_LOCAL_MACHINE,
			"SOFTWARE\\MICROSOFT\\WINDOWS\\CURRENTVERSION\\RUN",
			NULL,
			KEY_ALL_ACCESS,
			&hkey);
		::RegDeleteValue( 
			hkey,
			"SecretChat"/*键值*/);	//删除键值
		::RegCloseKey(hkey);
	}

	////根据注册表数据进行设置
	pSecretChatDlg->MyUpdateData();


	CDialog::OnOK();
}

void CSetup::OnCancel() 
{
	// TODO: Add extra cleanup here
	
	CDialog::OnCancel();
}

BOOL CSetup::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	//添加选项卡
    TC_ITEM tItem;
    tItem.mask = TCIF_TEXT;
    tItem.pszText = "密钥设置";
    tItem.cchTextMax = strlen( tItem.pszText);     
    m_setupTab.InsertItem( 0, &tItem);	//添加选项
 
	tItem.pszText="私钥管理";
	tItem.cchTextMax = strlen( tItem.pszText);
    m_setupTab.InsertItem( 1, &tItem);	//添加选项

	tItem.pszText="公钥管理";
	tItem.cchTextMax = strlen( tItem.pszText);
    m_setupTab.InsertItem( 2, &tItem);	//添加选项

	tItem.pszText="常规";
	tItem.cchTextMax = strlen( tItem.pszText);
    m_setupTab.InsertItem( 3, &tItem);	//添加选项

	tItem.pszText="关于";
	tItem.cchTextMax = strlen( tItem.pszText);
    m_setupTab.InsertItem( 4, &tItem);	//添加选项

	CRect rect;
	m_dingWei.GetWindowRect( &rect);
	ScreenToClient( &rect);

	m_secretKeySetupDlg.Create(IDD_SECRETKEYSETUP,this);
	m_privateManagerDlg.Create(IDD_PRIVATEMANAGER,this);
	m_publicKeyManagerDlg.Create(IDD_PUBLICKEYMANAGER,this);
	m_generalDlg.Create(IDD_GENERAL,this);
	m_aboutDlg.Create(IDD_ABOUTBOX,this);

	m_secretKeySetupDlg.MoveWindow( &rect);
	m_privateManagerDlg.MoveWindow( &rect);
	m_publicKeyManagerDlg.MoveWindow( &rect);
	m_generalDlg.MoveWindow( &rect);
	m_aboutDlg.MoveWindow( &rect);

	ShowTabWindow(0);	//更新下拉列表
	ShowTabWindow(m_index);	//每次显示前都要设置m_index的值

	//当没有私钥时提示生成


	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CSetup::OnSelchangeSetuptab(NMHDR* pNMHDR, LRESULT* pResult) 
{
	ShowTabWindow( m_setupTab.GetCurSel() );

	*pResult = 0;
}

void CSetup::ShowTabWindow(int index)	
{
	CSecretChatDlg * pSecretChatDlg = (CSecretChatDlg *)AfxGetMainWnd();
	switch(index)
	{	
	case 0: 
		m_secretKeySetupDlg.ShowWindow( SW_SHOW);
		m_privateManagerDlg.ShowWindow( SW_HIDE);
		m_publicKeyManagerDlg.ShowWindow( SW_HIDE);
		m_generalDlg.ShowWindow( SW_HIDE);
		m_aboutDlg.ShowWindow( SW_HIDE);
		//设置窗口图标
		SetIcon(AfxGetApp()->LoadIcon(IDI_IDIOGRAPH), FALSE);

		/*删除下拉列表中的所有字符*/
		m_secretKeySetupDlg.m_userPrivateKey.ResetContent();
		//添加指定目录的文件到下拉列表,并选择指定的项
		m_secretKeySetupDlg.m_userPrivateKey.Dir(
			DDL_DIRECTORY, 
			pSecretChatDlg->m_appName + "\\user\\*.sk");
		//m_secretKeySetupDlg.m_userPrivateKey.SetCurSel(0);	//如果只有一个项就选它
		m_secretKeySetupDlg.m_userPrivateKey.SelectString(
			-1,
			AfxGetApp()->GetProfileString("SecretKeySetup", "UserPrivateKey"));

		m_secretKeySetupDlg.m_friendPublicKey.ResetContent();
		m_secretKeySetupDlg.m_friendPublicKey.Dir(
			DDL_DIRECTORY, 
			pSecretChatDlg->m_appName + "\\friend\\*.pk");
		m_secretKeySetupDlg.m_friendPublicKey.SelectString(
			-1,
			AfxGetApp()->GetProfileString("SecretKeySetup", "FriendPublicKey"));

		SetWindowText("设置 - 密钥设置");
		break;
	case 1:
		m_secretKeySetupDlg.ShowWindow( SW_HIDE);
		m_privateManagerDlg.ShowWindow( SW_SHOW);
		m_publicKeyManagerDlg.ShowWindow( SW_HIDE);
		m_generalDlg.ShowWindow( SW_HIDE);
		m_aboutDlg.ShowWindow( SW_HIDE);
		SetIcon(AfxGetApp()->LoadIcon(IDI_IDIOGRAPH), FALSE);

		//删除全部列表
		m_privateManagerDlg.m_userList.ResetContent();
		//把指定目录的sk文件全部添加到列表
		m_privateManagerDlg.m_userList.Dir(
			DDL_DIRECTORY, 
			pSecretChatDlg->m_appName + "\\user\\*.sk");
		//选择列表中的某个字符
		m_privateManagerDlg.m_userList.SelectString(
			-1,
			AfxGetApp()->GetProfileString("SecretKeySetup", "UserPrivateKey"));

		SetWindowText("设置 - 私钥管理");			
		break;
	case 2:  
		m_secretKeySetupDlg.ShowWindow( SW_HIDE);
		m_privateManagerDlg.ShowWindow( SW_HIDE);
		m_publicKeyManagerDlg.ShowWindow( SW_SHOW);
		m_generalDlg.ShowWindow( SW_HIDE);
		m_aboutDlg.ShowWindow( SW_HIDE);
		SetIcon(AfxGetApp()->LoadIcon(IDI_IDIOGRAPH), FALSE);
		//删除全部列表
		m_publicKeyManagerDlg.m_friendList.ResetContent();
		//把指定目录的sk文件全部添加到列表
		m_publicKeyManagerDlg.m_friendList.Dir(
			DDL_DIRECTORY, 
			pSecretChatDlg->m_appName + "\\friend\\*.pk");
		//选择列表中的某个字符
		m_publicKeyManagerDlg.m_friendList.SelectString(
			-1,
			AfxGetApp()->GetProfileString("SecretKeySetup", "FriendPublicKey"));

		SetWindowText("设置 - 公钥管理");
		break;
	case 3:
		m_secretKeySetupDlg.ShowWindow( SW_HIDE);
		m_privateManagerDlg.ShowWindow( SW_HIDE);
		m_publicKeyManagerDlg.ShowWindow( SW_HIDE);
		m_generalDlg.ShowWindow( SW_SHOW);
		m_aboutDlg.ShowWindow( SW_HIDE);
		SetIcon(AfxGetApp()->LoadIcon(IDI_SETUP), FALSE);

		SetWindowText("设置 - 常规");
		break;
	case 4:
		m_secretKeySetupDlg.ShowWindow( SW_HIDE);
		m_privateManagerDlg.ShowWindow( SW_HIDE);
		m_publicKeyManagerDlg.ShowWindow( SW_HIDE);
		m_generalDlg.ShowWindow( SW_HIDE);
		m_aboutDlg.ShowWindow( SW_SHOW);
		SetIcon(AfxGetApp()->LoadIcon(IDI_SETUP), FALSE);

		SetWindowText("设置 - 关于");
		break;
	}

	m_setupTab.SetCurSel(index);	//设置选项的显示索引
}